/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.siagefi.dao;

import br.siagefi.infra.JPAUtil;
import br.siagefi.model.Usuario;
import java.io.Serializable;
import java.util.List;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;

/**
 *
 * @author Paulo Lavarini
 */
public class UsuarioDAO implements Serializable {

    private EntityManager em;

    public UsuarioDAO() {
        this.em = new JPAUtil().getEntityManager();
    }

    public Usuario porId(Long id) {
        return this.em.find(Usuario.class, id);
    }

    public List<Usuario> operadores() {
        // TODO filtrar apenas operadores (por um grupo específico)
        return this.em.createQuery("from Usuario", Usuario.class)
                .getResultList();
    }

    public List<Usuario> administradores() {
        // TODO filtrar apenas administradores (por um grupo específico)
        return this.em.createQuery("from Usuario", Usuario.class)
                .getResultList();
    }

    public List<Usuario> gerentes() {
        // TODO filtrar apenas gerentes (por um grupo específico)
        return this.em.createQuery("from Usuario", Usuario.class)
                .getResultList();
    }

    public Usuario porLogin(String login) {
        Usuario usuario = null;

        try {
            usuario = this.em.createQuery("from Usuario where lower(login) = :login", Usuario.class)
                    .setParameter("login", login.toLowerCase()).getSingleResult();
        } catch (NoResultException e) {
            // nenhum usuário encontrado com o login informado
        }

        return usuario;
    }
}
